import enum
from collections import namedtuple



'''
表示棋手
'''
class Player(enum.Enum):
    black = 1
    white = 2

    def __str__(self):
        """这个以后打印这个对象的时候就会输出B或者W
        :return:
        """
        return 'B' if self == Player.black else 'W'

    #这个注解是将函数调用转换为属性，允许我们用点语法来调用函数，就不用加括号了
    @property
    def other(self):
        return Player.white if self == Player.black else Player.black

'''
用元组表示棋盘上的交叉点

语法：
首先namedtuple()函数创建一个类，这个类继承了tuple类。这个类的第一个参数是类名，第二个参数是类的所有字段
然后我们定义一个point类来继承，这样我们就可以继承这个类的情况下定义自己的函数。这里我们定义的函数就是一个返回周围点的的函数
虽然我们直接定义一个有这两个属性的类也完全可以替代，但是这样写有更多方便的地方，因为我们用来现成的namedtuple作为模板，详细的好处
可以自行ai搜索
'''
class Point (namedtuple('point', 'row col')):
    def neighbors(self):
        return [
            Point(self.row - 1, self.col),
            Point(self.row + 1, self.col),
            Point(self.row, self.col - 1),
            Point(self.row, self.col + 1)
        ]



